W czasach Ludwika XIII i jego potężnego ministra, kardynała Richelieu, w gospodzie pod Pełnym Antałkiem raczyło się jadłem i winem
muszkieterów. Wina było pod dostatkiem, a że muszkieterowie byli skorzy do zwady, doszło do wielkiej awantury, w której każdy muszkieter obraził wszystkich pozostałych.
Musiało dojść do pojedynków, ale kto miał się z kim pojedynkować i w jakiej kolejności? Uzgodnili (po raz pierwszy od awantury zrobili coś zgodnie), że staną na okręgu w ustalonej kolejności i będą ciągnąć losy. Wylosowany muszkieter toczył pojedynek ze swoim sąsiadem z prawej. Przegrany "odpadał z gry", a dokładniej - służący wynosili jego zwłoki. Sąsiadem wygrywającego stawał się następny muszkieter, stojący za przegranym.
Po latach, gdy historycy czytali wspomnienia zwycięzcy, spostrzegli, że ostateczny wynik zależał w istotny sposób od kolejności wylosowanych pojedynków. Zauważyli bowiem, że dotychczasowe treningi fechtunku pokazywały, kto z kim mógł wygrać pojedynek. Okazało się, że - mówiąc językiem matematycznym - relacja "A wygrywa z B" nie była przechodnia! Mogło się zdarzyć, że muszkieter A walczył lepiej od muszkietera B, B lepiej od C, a C lepiej od A. Oczywiście wśród takiej trójki wybór pierwszego pojedynku decydował o ostatecznym wyniku! Jeśli pierwsi będą walczyć A i B, to ostatecznie wygra C, ale jeśli pierwszymi będą B i C, to ostatecznie wygra A. Historycy, zafascynowani tym odkryciem, postanowili sprawdzić, którzy muszkieterowie mogli przeżyć - od tego zależał przecież los Francji, a wraz z jej losem, los całej cywilizowanej Europy!
Na okręgu stoi
osób, ponumerowanych kolejno liczbami od
do
. Osoby te toczą
pojedynków. W pierwszej rundzie jedna z tych osób powiedzmy o numerze
- toczy pojedynek z sąsiadem z prawej, tzn. osobą o numerze
(lub, jeśli
, to z osobą o numerze
). Przegrany odpada z gry, sąsiadem zwycięzcy staje się następna w kolejności osoba. Dana jest też tabela możliwych wyników pojedynków w postaci macierzy
. Jeśli
, to osoba o numerze
zawsze wygrywa z osobą o numerze
. Jeżeli
, to osoba o numerze
przegrywa z osobą o numerze
. Mówimy, że osoba
może wygrać zawody, jeżeli istnieje taki ciąg
losowań, w wyniku którego będzie ona zwycięzcą ostatniego pojedynku.
Napisz program, który:
,
W pierwszym wierszu standardowego wejścia dana jest liczba całkowita
spełniająca nierówność
. W każdym z następnych
wierszy znajduje się jedno słowo złożone z
znaków 0 lub 1. Znak stojący na
-tym miejscu w
-tym z tych wierszy oznacza wartość
(tzn. jeśli tym znakiem jest jedynka, to
, a jeśli zero, to
). Oczywiście
, dla
. Przyjmujemy, że
, dla każdego
.
W pierwszym wierszu standardowego wyjścia należy zapisać liczbę
tych osób, które mogą wygrać zawody. W następnych
wierszach należy zapisać numery tych osób w kolejności rosnącej, po jednym numerze w wierszu.
Dla danych wejściowych:
7 1111101 0101100 0111111 0001101 0000101 1101111 0100001
poprawną odpowiedzią jest:
3 1 3 6
Kolejność pojedynków: 1-2, 1-3, 5-6, 7-1, 4-6, 6-1 daje ostateczną wygraną osobie o numerze 6. Można też sprawdzić, że jeszcze tylko osoby o numerach 1 i 3 mogą wygrać zawody.
Autor zadania: Wojciech Guzicki.
W razie problemów technicznych ze Szkopułem, prosimy o kontakt mailowy pod adresem szkopul@fri.edu.pl.
Jeśli chciałbyś porozmawiać o zadaniach, rozwiązaniach lub problemach technicznych, odwiedź nasze serwery na Discordzie. Są one moderowane przez społeczność, ale członkowie zespołu wsparcia również aktywnie się tam udzielają.